icon: Render at content position
authorTimm Bäder <mail@baedert.org>
Sat, 20 May 2017 12:08:42 +0000 (14:08 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 20 Jul 2017 01:27:13 +0000 (21:27 -0400)
Since we get offset automatically to the widget allocation before
->snapshot is called, we still have to offset the difference to the
position of the content allocation.

gtk/gtkicon.c

index 3591a30ab07c3750e2d5fc86d9572f27d5110433..9d1645e661f557daeb66685ef9c1d727e6ca8db8 100644 (file)
@@ -24,6 +24,7 @@
 #include "gtkiconprivate.h"
 #include "gtkwidgetprivate.h"
 #include "gtkrendericonprivate.h"
+#include "gtksnapshot.h"
 
 /* GtkIcon was a minimal widget wrapped around a GtkBuiltinIcon gadget,
  * It should be used whenever builtin-icon functionality is desired
@@ -45,14 +46,22 @@ gtk_icon_snapshot (GtkWidget   *widget,
 {
   GtkIcon *self = GTK_ICON (widget);
   GtkCssStyle *style = gtk_css_node_get_style (gtk_widget_get_css_node (widget));
+  GtkAllocation content_alloc;
   GtkAllocation alloc;
+  int x, y;
 
-  gtk_widget_get_content_allocation (widget, &alloc);
+  gtk_widget_get_allocation (widget, &alloc);
+  gtk_widget_get_content_allocation (widget, &content_alloc);
 
+  x = content_alloc.x - alloc.x;
+  y = content_alloc.y - alloc.y;
+
+  gtk_snapshot_offset (snapshot, x, y);
   gtk_css_style_snapshot_icon (style,
                                snapshot,
-                               alloc.width, alloc.height,
+                               content_alloc.width, content_alloc.height,
                                self->image);
+  gtk_snapshot_offset (snapshot, -x, -y);
 }
 
 static void